// src/utils/broadcast.js

// 创建一个唯一的频道名称
const channel = new BroadcastChannel('app_oauth_channel');

// 用于存储 Promise 的 resolve 函数
let waitPromiseResolve = null;

/**
 * 监听消息，如果 `wait` 方法正在等待，则解决 Promise
 * @param {MessageEvent} event
 */
channel.onmessage = (event) => {
  if (waitPromiseResolve) {
    waitPromiseResolve(event.data);
    waitPromiseResolve = null; // 解决后重置
  }
};

/**
 * 发送数据到其他窗口
 * @param {any} data - 要发送的数据
 */
function send(data) {
  channel.postMessage(data);
}

/**
 * 等待从其他窗口接收数据
 * @returns {Promise<any>} 返回一个 Promise，它将在接收到数据时解决
 */
function wait() {
  return new Promise((resolve) => {
    waitPromiseResolve = resolve;
  });
}

/**
 * 清理等待状态 (虽然在这个实现中不是严格必需的，但保持 API 一致性)
 */
function clear() {
  waitPromiseResolve = null;
}

export default {
  send,
  wait,
  clear,
};
